"""
主业务代码：面向对象，数据分析案例
实现步骤：
    1.设计一个类用于完成数据的封装
    2.设计一个抽象类，定义文件数据读取相关功能，并使用子类实现具体的功能
    3.读取文件，生产数据对象
    4.进行数据的逻辑计算
    5.通过pycharts进行图形绘制
"""
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType

from file_define import read_file, TextFileReader, JsonFileReader
from data_define import ReCord

text_file_path = "/Users/dongjian/Documents/学习/python-learn-资料/资料/第13章资料/2011年1月销售数据.txt"
json_file_path = "/Users/dongjian/Documents/学习/python-learn-资料/资料/第13章资料/2011年2月销售数据JSON.txt"

# text_list: list[ReCord] = TextFileReader(text_file_path).read_data()
# json_list: list[ReCord] = JsonFileReader(json_file_path).read_data()

# 多态
text_file_reader = TextFileReader(text_file_path)
json_file_reader = JsonFileReader(json_file_path)

text_list: list[ReCord] = read_file(text_file_reader)
json_list: list[ReCord] = read_file(json_file_reader)

# 将两个列表的数据合并存储
all_data: list[ReCord] = text_list + json_list

# 将数据封装到字典中 {"2023-01-01":1234, "2023-01-02":1243 ...}
data_dict = {}
for record in all_data:
    if record.date in data_dict.keys():
        data_dict[record.date] += record.money
    else:
        data_dict[record.date] = record.money

# print(data_dict)

# --------------------可视化开发------------------------
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))

bar.add_xaxis(list(data_dict.keys()))
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额")
)
bar.render("每日销售额柱状图.html")
